//
// Created by DengLibin on 2019/1/11 0011.
//

#include <iostream>
#include <vector>
using namespace std;

/**
 * 给定一个链表，删除链表的倒数第 n 个节点，并且返回链表的头结点
 * 示例：

给定一个链表: 1->2->3->4->5, 和 n = 2.

当删除了倒数第二个节点后，链表变为 1->2->3->5.
 */
struct ListNode {
    int val;
    ListNode *next;
    ListNode(int x) : val(x), next(NULL) {}
};

ListNode* removeNthFromEnd(ListNode* head, int n) {
    //给每个节点编号
    vector<ListNode *> v;
    ListNode * tempNode = head;
    while(tempNode != NULL){
        v.push_back(tempNode);
        tempNode = tempNode->next;
    }
    if(n > v.size() || n <= 0){
        return head;
    }
    //找到倒数第n个节点
    int index = v.size() - n;
    if(index == 0){
        return head->next;
    }
    ListNode * node = v.at(index);
    v.at(index -1)->next = node->next; //它的前一个节点指向后一个节点
    return head;

}
int main55(){

    return 0;
}